import re

from bs4 import BeautifulSoup


def has_class_but_no_id(tag):
    """
    元素具有 class 属性，但是没有 id 属性
    :param tag: 元素标签名称
    :return:
    """
    return tag.has_attr('class') and not tag.has_attr('id')


if __name__ == '__main__':
    # 从文件中读取内容，并保存到 text 变量中
    f = open("The Dormouse's story.html", mode="r", encoding="utf-8")
    text = f.read()
    f.close()

    # 将文本内容进行解析
    soup = BeautifulSoup(text, "html.parser")

    # 通过名字查找元素
    # p = soup.find(name="p")
    # print(p)

    # # 通过属性进行查找，注意：class 是 python  语言中的关键词，在使用的时候用 class_ 进行替代。
    # story = soup.find(class_='story')
    # print(story)

    # # 查找所有的 样式为 sister 的元素，并返回列表类型
    # sisters = soup.find_all(class_= "sister")
    # print(sisters)

    # # 使用正则表达式查找所有的以 b 开头的标签
    # tag = re.compile("^b")
    #
    # results = soup.find_all(name=tag)
    # print(results)

    # # 一次查找多个标签元素
    # results = soup.find_all(name=["body", "title"])
    # print(results)
    # # 一次查找多个属性
    # results = soup.find_all(class_=["title", "story"])
    # print(results)

    # # 通过自定义方法进行查找
    # results = soup.find_all(has_class_but_no_id)
    # print(results)

    # # 查找指定属性的值
    # results = soup.find_all(attrs={'class': "title"})
    # print(results)
    # print(results[0].text)

    # # 查找多个指定属性的值
    # results = soup.find_all(attrs={'id': "link3", "class": "sister"})
    # print(results)

    # 得到指定个数的元素
    # # 默认情况下，返回第一个元素或者所有的元素
    # result = soup.find(name='p')
    # print(result)
    # results = soup.find_all(name='p')
    # print(results)
    # # 通过  limit 得到指定的个数
    # results = soup.find_all(name='p', limit=2)
    # print(results)
